Remove/refactor some .unwraps.
authorHuon Wilson <dbau.pp+github@gmail.com>
Fri, 27 Jun 2014 11:55:11 +0000 (21:55 +1000)
committerHuon Wilson <dbau.pp+github@gmail.com>
Fri, 27 Jun 2014 11:55:11 +0000 (21:55 +1000)
Many of these had some precondition being changed that guaranteed they'd
never happen, but could be expressed to just avoid the `.unwrap`
entirely (easier to check).

Other `Option` unwraps were changed to have a mildly more informative
error message by using `.expect`.

src/bin/cargo-verify-project.rs
src/cargo/core/package.rs
src/cargo/ops/cargo_rustc.rs
src/cargo/util/config.rs

index ff2c5e7fbb0b6d3fadd14f4d2189439d13f26883..440919518244b49d3f1718e29cbdb0d5a86302b0 100755 (executable)
@@ -26,12 +26,13 @@ fn main() {
         }
     };
 
-    if !matches.opt_present("m") {
-        fail("missing-argument", "manifest");
-        return;
-    }
-
-    let manifest = matches.opt_str("m").unwrap();
+    let manifest = match matches.opt_str("m") {
+        Some(m) => m,
+        None => {
+            fail("missing-argument", "manifest");
+            return;
+        }
+    };
     let file = Path::new(manifest);
     let contents = match File::open(&file).read_to_str() {
         Ok(s) => s,
index b9cc31921ad5489e69d3ffa8aa4601eeff278879..8feae143c293b238fff19daaa92fa42ac5bb5fea 100644 (file)
@@ -155,12 +155,13 @@ impl PackageSet {
     }
 
     pub fn pop(&mut self) -> Package {
-        self.packages.pop().unwrap()
+        self.packages.pop().expect("PackageSet.pop: empty set")
     }
 
     /// Get a package by name out of the set
     pub fn get<'a>(&'a self, name: &str) -> &'a Package {
-        self.packages.iter().find(|pkg| name == pkg.get_name()).unwrap()
+        self.packages.iter().find(|pkg| name == pkg.get_name())
+            .expect("PackageSet.get: empty set")
     }
 
     pub fn get_all<'a>(&'a self, names: &[&str]) -> Vec<&'a Package> {
index 3411f5306f22dad68a85ce1d6957be9e1e9bd339..9b4489d79d69b124c9d3e1f1e968907b1bb48ab9 100644 (file)
@@ -168,9 +168,9 @@ fn compile_custom(pkg: &Package, cmd: &str, cx: &Context) -> CargoResult<()> {
     let mut cmd = cmd.split(' ');
     let mut p = util::process(cmd.next().unwrap())
                      .cwd(pkg.get_root())
-                     .env("OUT_DIR", Some(cx.dest.as_str().unwrap()))
+                     .env("OUT_DIR", Some(cx.dest.as_str().expect("non-UTF8 dest path")))
                      .env("DEPS_DIR", Some(cx.dest.join(cx.deps_dir)
-                                             .as_str().unwrap()));
+                                             .as_str().expect("non-UTF8 deps path")));
     for arg in cmd {
         p = p.arg(arg);
     }
index 7c0ac0a140ee279f0595ebe9801ce92a234e87a2..898d025b5414ec053a51ad57b1b4012ebf5cc47f 100644 (file)
@@ -1,4 +1,4 @@
-use std::{io,fmt,os};
+use std::{io,fmt,os, result};
 use std::collections::HashMap;
 use serialize::{Encodable,Encoder};
 use toml;
@@ -231,17 +231,15 @@ fn merge_array(existing: &mut ConfigValue, val: &[toml::Value],
     match existing.value {
         String(_) => Err(internal("should be an Array, but it was a String")),
         List(ref mut list) => {
-            let new_list: Vec<CargoResult<String>> =
-                val.iter().map(toml_string).collect();
-            if new_list.iter().any(|v| v.is_err()) {
-                return Err(internal("should be an Array of Strings, but \
-                                     was an Array of other values"));
-            } else {
-                let new_list: Vec<String> =
-                    new_list.move_iter().map(|v| v.unwrap()).collect();
-                list.push_all(new_list.as_slice());
-                existing.path.push(path.clone());
-                Ok(())
+            let r: CargoResult<Vec<String>> = result::collect(val.iter().map(toml_string));
+            match r {
+                Err(_) => Err(internal("should be an Array of Strings, but \
+                                        was an Array of other values")),
+                Ok(new_list) => {
+                    list.push_all(new_list.as_slice());
+                    existing.path.push(path.clone());
+                    Ok(())
+                }
             }
         }
     }